package br.visao;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;

import br.modelo.Chefia;
import br.modelo.Usuario;
import br.rn.ChefiaRN;
import br.rn.UsuarioRN;
import br.util.Mensagem;


@ManagedBean
@RequestScoped
public class UsuarioBean {
	private UsuarioRN usuarioRN;
	private Usuario usuarioSelecionado;
	private Mensagem mensagem;
	private List<SelectItem> usuarioSelect;
	private List<Usuario> listaUsuarios;
	
	private ChefiaRN chefiaRN;
	private Chefia chefiaSelecionada;
	public UsuarioBean() {
	}

	@PostConstruct
	public void setUp() {
		usuarioRN = new UsuarioRN();
		usuarioSelecionado = new Usuario();
		mensagem  = new Mensagem();
		
		chefiaRN =  new ChefiaRN();
		chefiaSelecionada = new Chefia();
	}

	public void salvar() {
		
		
	if(usuarioSelecionado.getNome() =="" || usuarioSelecionado.getLogin() == "" || usuarioSelecionado.getSenha() == "" 
	 || usuarioSelecionado.getNivel() == 0){	
		mensagem.msgPreencheCampos();
	}else{
		
		
		
		
		chefiaSelecionada.setUsuario(usuarioSelecionado);
		chefiaSelecionada.setSubcoor(usuarioSelecionado.getUsuario());
		chefiaRN.salvar(chefiaSelecionada);
		
		usuarioSelecionado.setDataCadastro(new Date());
		usuarioSelecionado.setAtivo(true);
		usuarioSelecionado.setChefia(chefiaSelecionada);
		
		
		usuarioRN.salvar(usuarioSelecionado);
			if(usuarioSelecionado.getNivel() == 1){
				atribuiPermissao(usuarioSelecionado, "ROLE_USUARIO");
				atribuiPermissao(usuarioSelecionado, "ROLE_ADMINISTRADOR");
				atribuiPermissao(usuarioSelecionado, "ROLE_COORD");
				atribuiPermissao(usuarioSelecionado, "ROLE_SUBCOORD");
			}
			if(usuarioSelecionado.getNivel() == 2){
				atribuiPermissao(usuarioSelecionado, "ROLE_COORD");
				
			}
			
			if(usuarioSelecionado.getNivel() == 3){
				atribuiPermissao(usuarioSelecionado, "ROLE_SUBCOORD");
				
			}
			if(usuarioSelecionado.getNivel() == 4){
				atribuiPermissao(usuarioSelecionado, "ROLE_USUARIO");
				
			}
			
			mensagem.msgDadosInseridos();
		
		}	
			
	}

	
	public List<SelectItem> getUsuarioSelect() {
		if(this.usuarioSelect == null){
			usuarioSelect = new ArrayList<SelectItem>();
			
			UsuarioRN usuRN = new UsuarioRN();
			
			if (usuarioSelecionado.getNivel() == null || usuarioSelecionado.getNivel() == 0){
				listaUsuarios = usuRN.listar();
			}else{		
				if (usuarioSelecionado.getNivel() == 4) {
					listaUsuarios = usuRN.listarSubCoord();
				}
				if (usuarioSelecionado.getNivel() == 3) {
					listaUsuarios = usuRN.listarCoord();
				}
				if (usuarioSelecionado.getNivel() == 2) {
					listaUsuarios = usuRN.listarAdm();
				}
				if (usuarioSelecionado.getNivel() == 1) {
					listaUsuarios = usuRN.listar();
				}
			}	
			
			
			if(listaUsuarios != null && !listaUsuarios.isEmpty()){
				SelectItem item;
					for (Usuario usuariosLista : listaUsuarios) {
					item = new SelectItem(usuariosLista, usuariosLista.getNome());
					usuarioSelect.add(item);
				}
			}
		}
		return usuarioSelect;
	}

	public void pesquisaUsuario() {
		Usuario teste =usuarioRN.buscaLogin(usuarioSelecionado.getLogin());
		
		
		if (teste.getLogin() != null) {
			mensagem.msgErroUsuarioCadastrado();
			
			
		}

	}
	
	
	public String atribuiPermissao(Usuario usuarioSelecionado, String permissao) {

		this.usuarioSelecionado = usuarioSelecionado;

		Set<String> permissoes = this.usuarioSelecionado.getPermissao();

		if (permissoes.contains(permissao)) {
			permissoes.remove(permissao);
		} else {
			permissoes.add(permissao);
		}
		return null;
	}
	
	
	

	
	
	public Usuario getUsuarioSelecionado() {
		return usuarioSelecionado;
	}

	public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
		this.usuarioSelecionado = usuarioSelecionado;
	}	
	
	
		
}



